import pandas as pd

# 加载数据
data = pd.read_csv('/mnt/data/merge_data1.csv')

# 检查缺失值
missing_values = data.isnull().sum()

# 检查重复值
duplicate_values = data.duplicated().sum()


# 使用发货吨位填充到站吨位的缺失值
data['到站吨位'].fillna(data['发货吨位'], inplace=True)

# 删除货款列
data.drop(columns=['货款'], inplace=True)

# 再次检查缺失值
missing_values_updated = data.isnull().sum()
data['发货记录完成时间'] = pd.to_datetime(data['发货记录完成时间'])

# 提取年份和月份
data['年份'] = data['发货记录完成时间'].dt.year
data['月份'] = data['发货记录完成时间'].dt.month
import matplotlib.pyplot as plt

# 按年份和月份对数据进行分组，并计算每个月的总发货吨位
monthly_sales = data.groupby(['年份', '月份'])['发货吨位'].sum().reset_index()

# 绘制销售趋势图
plt.figure(figsize=(12, 6))
plt.plot(monthly_sales['年份'].astype(str) + '-' + monthly_sales['月份'].astype(str), monthly_sales['发货吨位'], marker='o')
plt.title('每月总发货吨位')
plt.xlabel('年份-月份')
plt.ylabel('总发货吨位')
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# 选择2023年的数据进行分析
data_2023 = monthly_sales[monthly_sales['年份'] == 2023]

# 绘制ACF和PACF图
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
plot_acf(data_2023['发货吨位'], lags=12, ax=ax[0])
plot_pacf(data_2023['发货吨位'], lags=12, ax=ax[1])
plt.tight_layout()
plt.show()
# 使用更少的滞后值绘制ACF和PACF图
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
plot_acf(data_2023['发货吨位'], lags=6, ax=ax[0])
plot_pacf(data_2023['发货吨位'], lags=6, ax=ax[1])
plt.tight_layout()
plt.show()
from statsmodels.tsa.arima.model import ARIMA
import numpy as np

# 定义一个函数来计算ARIMA模型的AIC
def calculate_aic(order):
    try:
        model = ARIMA(data_2023['发货吨位'], order=order)
        model_fit = model.fit(disp=0)
        return model_fit.aic
    except:
        return np.inf

# 定义一个函数来寻找最佳ARIMA模型参数
def find_best_arima_params(max_p, max_q, d):
    best_aic = np.inf
    best_order = None
    for p in range(max_p + 1):
        for q in range(max_q + 1):
            order = (p, d, q)
            aic = calculate_aic(order)
            if aic < best_aic:
                best_aic = aic
                best_order = order
    return best_order, best_aic

# 寻找最佳ARIMA模型参数
best_order, best_aic = find_best_arima_params(3, 3, 1)
best_order, best_aic